package cn.hf.mychat.constanst;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.text.StringSubstitutor;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * 常量定义
 *
 * @author Administrator
 */
public final class Const {

    /**
     * 响应状态码
     */
    public static final String SUCCESS = "200";

    /**
     * 判断代码：是
     */
    public static final String TRUE = "1";
    /**
     * 判断代码：否
     */
    public static final String FALSE = "0";
    /**
     * 正常用户
     */
    public static final String VALID_USER = "0";
    /**
     * 非正常用户
     */
    public static final String INVALID_USE = "1";
    /**
     * 男性
     */
    public static final int MALE = 0;
    /**
     * 女性
     */
    public static final int FEMALE = 1;
    /**
     * 银码头
     */
    public static final String SOURCE_YIN_MA_TOU = "1";
    /**
     * 侬要贷、
     */
    public static final String SOURCE_NONG_YAO_DAI = "2";
    /**
     * 其他
     */
    public static final String SOURCE_OTHER = "0";
    /**
     * 通用字符集编码
     */
    public static final String CHARSET_UTF8 = "UTF-8";
    /**
     * 中文字符集编码
     */
    public static final String CHARSET_CHINESE = "GBK";
    /**
     * 英文字符集编码
     */
    public static final String CHARSET_LATIN = "ISO-8859-1";
    /**
     * 根节点ID
     */
    public static final String ROOT_ID = "root";
    /**
     * NULL字符串
     */
    public static final String NULL = "null";
    /**
     * 年-月-日 时：分：秒格式
     */
    public static final String DATE_FULL_STR = "yyyy-MM-dd HH:mm:ss";

    /**
     * 年-月-日 时：分：秒：纳秒 格式
     */
    public static final String DATE_LONG_STR = "yyyy-MM-dd HH:mm:ss.SSS";
    /**
     * 年-月-日格式
     */
    public static final String DATE_SMALL_STR = "yyyy-MM-dd";
    /**
     * 年月日时分秒
     */
    public static final String DATE_KEY_STR = "yyMMddHHmmss";
    public static final String DATE_All_KEY_STR = "yyyyMMddHHmmss";
    /**
     * JSON成功标记s
     */
    public static final String JSON_SUCCESS = "success";
    /**
     * JSON数据
     */
    public static final String JSON_DATA = "data";
    /**
     * JSON数据列表
     */
    public static final String JSON_ROWS = "rows";
    /**
     * JSON总数
     */
    public static final String JSON_TOTAL = "total";
    /**
     * JSON消息文本
     */
    public static final String JSON_MESSAGE = "message";
    /**
     * 货到付款
     */
    public static final Integer CASH_ON_DELIVERY = 1;
    /**
     * 在线支付
     */
    public static final Integer ONLINE_PAYMENT = 2;
    /**
     * 微信支付
     */
    public static final Integer WEIXIN_PAYMENT = 3;
    /**
     * 支付宝支付
     */
    public static final Integer ALIPAY_PAYMENT = 4;
    /**
     * 直付商家
     */
    public static final Integer SHOP_PAYMENT = 5;
    /**
     * 未付款
     */
    public static final Integer NON_PAYMENT = 1;
    /**
     * 已付款
     */
    public static final Integer PAYMENT = 2;
    /**
     * 待发货
     */
    public static final Integer NON_SHIPMENTS = 3;
    /**
     * 已发货
     */
    public static final Integer SHIPMENTS = 4;
    /**
     * 交易成功
     */
    public static final Integer SUCCESSFUL = 5;
    /**
     * 交易关闭
     */
    public static final Integer CLOSED = 0;
    /**
     * 未评价
     */
    public static final Integer EVALUATE_NO = 7;
    /**
     * 已评价
     */
    public static final Integer EVALUATE_YES = 8;
    /**
     * cookie 用户登录token
     */
    public static final String TOKEN_LOGIN = "_clg";
    /**
     * cookie 购物车 key
     */
    public static final String CART_KEY = "_cca";

    private Const() {
    }

    /**
     * 短信类型
     */
    public enum MessageType {
        /**
         * 订单提交成功
         */
        SUBMIT_ORDER_SUCCESS,
        /**
         * 月账单提醒
         */
        NOTIFY_MONTHLY_BILL_REPAYMENT,
        /**
         * 下单支付成功
         */
        ORDER_PAY_SUCCESS,
        /**
         * 下单支付失败
         */
        ORDER_PAY_FAIL,
        /**
         * 动态验证码
         */
        ORDER_MESSAGE,
        /**
         * 扣款完成
         */
        REPAYMENT_SUCCESS,
        /**
         * 扣款失败
         */
        REPAYMENT_FAIL,
        /**
         * 订单还款日
         */
        ORDER_REPAYMENT_DATE,
        /**
         * 账单逾期一天
         */
        ONE_DAY_BILL_DUE,
        /**
         * 账单逾期三天
         */
        THREE_DAY_BILL_DUE,
        /**
         * 京东账户余额提醒
         */
        RESIDUAL_BALANCE_WARNING
    }

    /**
     * 系统类型
     */
    @Getter
    @AllArgsConstructor
    public enum SystemEnum {
        /**
         * 银码头
         */
        SILVER_PIER("ymt"),
        WANT_LEND("nyd"),
        MALL("mall");

        private String source;
    }

    @Getter
    @AllArgsConstructor
    public enum SmsTemplateEnum {
        /**
         * 订单提交成功
         */
        SUBMIT_ORDER_SUCCESS_MESSAGE(
                "您的订单已提交成功，感谢您的支持，相关信息请登入${app}查看！若有疑问请致电客服：029-68282231"),
        /**
         * 账单提醒
         */
        BILL_REMINDER_MESSAGE(
                "您好，您的${year}年${month}月账单已出账，应还金额${amount}元，请在${year1}年${month1}月${day1}日前结清，若有疑问请致电客服：02968280503"),

        /**
         * 订单状态
         */
        PAY_SUCCESS_MESSAGE(
                "尊敬的用户，您商城分期购买的商品下单成功（${orderNo}），并生成相应还款计划，请登录${app}-还款页面查看，若有疑问请致电客服：02968280503"),

        /**
         * 订单状态
         */
        PAY_FAIL_MESSAGE(
                "尊敬的用户，您商城分期购买的商品下单失败（${orderNo}），若有疑问请致电客服：029-68282231"),

        /**
         * 动态验证码
         */
        DYNAMIC_VERIFICATION_MESSAGE(
                "您的动态验证码为:${verificationCode}，请在2分钟内使用，请勿向他人泄露！"),

        /**
         * 扣款完成
         */
        REPAYMENT_SUCCESS_MESSAGE(
                "您好，您本期的账单${amount}元，已完成支付；若有疑问请登录${app}查询或致电客服：02968280503"),

        /**
         * 扣款失败
         */
        REPAYMENT_FAIL_MESSAGE(
                "您好，很抱歉的通知您，您的本次支付不成功；若有疑问请登录${app}查询或致电客服：02968280503"),

        /**
         * 还款提醒
         */
        ORDER_REPAYMENT_DATE_MESSAGE(
                "尊敬的用户，您商城分期购买的商品订单本期账单金额${amount}，到期还款日${paymentDate}，请按时至${app}还款，若有疑问请致电客服：02968280503"),
        /**
         * 逾期提醒
         * 逾期一天消息模板
         */
        ONE_DAY_BILL_DUE_MESSAGE(
                "尊敬的用户，您商城分期购买的商品订单已拖欠账单1天，需还金额为${amount}。拖欠账单每天会产生额外费用，并影响您的信誉。请至${app}进行还款，若有疑问请致电客服：02968280503"),
        /**
         * 逾期提醒
         * 逾期三天消息模板
         */
        THREE_DAY_BILL_DUE_MESSAGE(
                "尊敬的用户，您商城分期购买的商品订单已拖欠账单3天，需还金额为${amount}。拖欠账单每天会产生额外费用，并影响您的信誉。请至${app}进行还款。若有疑问请致电客服：02968280503"),

        /**
         * 站内信
         * 授信成功站内信消息
         */
        CREDIT_SUCCESSFULLY_MESSAGE(
                "尊敬的用户，您好，由于您的信用良好，在您获得授信额度的同时还享有商城提供的最高2万元专享授信购物额度。快来查看吧。"),

        /**
         * 站内信
         * 优惠券未使用站内信消息
         */
        COUPON_UNUSED_MESSAGE("亲爱的用户，您有商城专属优惠券尚未使用。可以在我的商城-我的卡券中查看。"),

        /**
         * 站内信
         * 订单发货站内信消息
         */
        ORDER_SHIPMENTS_MESSAGE("亲爱的用户，您的订单${orderNo}已发货，单号${expressNo}请注意查收哦。"),
        /**
         * 站内信
         * 对所有注册用户发送的消息站内信消息
         */
        ALL_REGISTER_USER_MESSAGE("Hi，亲爱的，小银商城好物不将就！商城专属最高20000元购物额度。你购物，享额度，0首付，轻松得。"),

        /**
         * 站内信
         * 账单到期提前三天发消息提醒还款
         */
        BEFORE_THREE_DAY_BILL_DUE_MESSAGE(
                "尊敬的用户，您当月账单将在${returnDate}到期，为免影响信用请按时还款哦。点击查看账单"),

        /**
         * 站内信
         * 对下单未付款的用户10分钟（站内信10分钟）
         */
        NON_PAYMENT_USER_MESSAGE(
                "亲爱的用户，您的订单${orderName}尚未付款。您可以在我的商城中查看待付款订单，并通过商城信用额度或其他方式支付，库存有限，快来查看吧。"),

        /**
         * 定时任务，当京东账户余额低于2万元时预警，每3小时跑一次
         */
        RESIDUAL_BALANCE_WARNING("商城京东账户余额预警，当前余额：${balance}，请及时充值。");

        public static final String APP_NAME = "appName";
        public static final String PHONE = "phone";
        public static final String VERIFICATION_CODE = "verificationCode";
        public static final String YEAR = "year";
        public static final String MONTH = "month";
        public static final String DAY = "day";
        public static final String YEAR1 = "year1";
        public static final String MONTH1 = "month1";
        public static final String DAY1 = "day1";
        public static final String AMOUNT = "amount";
        public static final String ORDER_NO = "orderNo";
        public static final String PAYMENT_DATE = "paymentDate";
        public static final String APP = "app";
        public static final String MALL = "mall";
        public static final String BALANCE = "balance";

        private String templateContent;

        public static String convertTemplateContent(Map<String, String> params,
                                                    Const.SmsTemplateEnum smsTemplateEnum) {
            String templateContent = smsTemplateEnum.getTemplateContent();
            StringSubstitutor substitutor = new StringSubstitutor(params);
            return substitutor.replace(templateContent);
        }

    }

    @Getter
    @AllArgsConstructor
    public enum AppNameEnum {
        /**
         * 银码头
         */
        YMT("ymt", "银码头"),
        MALL("mall", "小银优品"),
        DDQ("ddq", "哆哆钱"),
        YXJ("yxj", "易小借"),
        YINXJ("yinxj", "银小借"),
        JYQB("jyqb", "急用钱包"),
        JKDH("jkdh", "借款导航"),
        BZD("bzd", "豹子贷"),
        JFQB("jfqb", "聚福钱包"),
        ZYQB("zyqb", "涨赢钱包"),
        ZYPH("zyph", "涨盈普惠"),
        JFFQ("jffq", "聚富分期"),
        BSPH("bsph", "百事普惠"),
        YMTPRO("ymtpro", "银码头专业版"),

        WDX("wdx", "网贷侠"),
        LQB("lqb", "猎钱宝 "),
        KDYM("kdym", "口袋有米"),
        NNQB("nnqb", "纳纳钱包"),
        QJB("qjb", "去借保"),
        QDQ("qdq", "趣豆钱"),
        MHB("mhb", "米花包"),
        YKX("ykx", "银开心"),
        SWD("swd", "速网贷"),
        DDY("ddy", "贷贷鱼"),
        KZZJ("kzzj", "口子之家"),
        HBB("hbb", "花呗宝"),
        NYD("nyd", "侬要贷"),
        XQH("xqh", "向钱花"),
        XQB("xqb", "向钱宝"),
        WWJ("wwj", "万万借"),
        XQJ1("xqj1", "享钱借"),
        XQJ2("xqj2", "享钱进"),
        FMH("fmh", "分秒花"),
        XXX("xxx", "小心鑫"),
        YIDQ("yidq", "易哆钱"),
        YDQ("ydq", "银兜钱"),
        ZBJ("zbj", "猪八借"),
        HJQ("hjq", "好借钱"),
        SXD("sxd", "随心贷"),
        AYH("ayh", "安逸花"),
        SWD2("swd", "随我贷"),
        PHFQ("phfq", "普惠分期"),
        JBD("jbd", "金豹贷"),
        RRQB("rrqb", "人人钱包");

        private String source;
        private String appName;

        public static String getAppName(String source) {
            if (StringUtils.hasText(source)) {
                for (AppNameEnum nameEnum : AppNameEnum.values()) {
                    if (source.equals(nameEnum.getSource())) {
                        return nameEnum.getAppName();
                    }
                }
            }
            return AppNameEnum.MALL.getAppName();
        }
    }

}
